package com.bluefox.system.redis;

import com.bluefox.modules.pwxk.model.PwBaseInfo;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

/**
 * @Author : SunFeng
 * @Description:
 * @Date : 2021/7/2  9:59
 */
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisHash {
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 以图片 ID 1101000060 和图片存储对象 ID 3302000080 为例，我们可以把图片 ID 的前 7 位（1101000）作为 Hash 类型的键，
     * 把图片 ID 的最后 3 位（060）和图片存储对象 ID 分别作为 Hash 类型值中的 key 和 value。
     * <p>
     * hash二级编码方法中采用的 ID 长度是有讲究的。
     * <p>
     * Hash类型什么时候采用压缩列表 什么时候使用hash表呢？   设置了用压缩列表保存数据时的两个阈值，一旦超过了阈值，Hash类型就会采用哈希表来保存数据了
     * <p>
     * 这两个阈值的配置项：
     * hash-max-ziplist-entries:表示用压缩列表保存时哈希集合中最大元素个数。  这两个值不易设置的过大 查询数据会整个压缩列表扫描 数据量较大时查询性能就会下降比较厉害。
     * hash-max-ziplist-value:表示压缩列表保存哈希集合中单个元素的最大长度
     * <p>
     * 如果我们往 Hash 集合中写入的元素个数超过了 hash-max-ziplist-entries，或者写入的单个元素大小超过了 hash-max-ziplist-value，
     * Redis 就会自动把 Hash 类型的实现结构由压缩列表转为哈希表。  ，Hash 类型就会一直用哈希表进行保存，而不会再转回压缩列表了。
     */
    @Test
    public void testHashSecondaryCoding() {

        String imageID = "1101000060";
        String imageObjectID = "3302000080";


        redisTemplate.boundHashOps(imageID.substring(0, 6)).put(imageID.substring(6, 9), imageObjectID);

    }
    @Test
    public void testGetHashSecondaryCoding() {

        String imageID = "1101000060";
        String imageObjectID = "3302000080";


        Object o = redisTemplate.boundHashOps(imageID.substring(0, 6)).get(imageID.substring(6, 9));
        System.out.println(o);

    }
    @Test
    public void testSortedSet() {
        String imageID = "1101000060";
        String imageObjectID = "3302000080";

        redisTemplate.boundZSetOps(imageID.substring(0, 6)).add(imageObjectID, Double.parseDouble(imageID.substring(6, 9)));





    }
}
